syntax = "proto3";

enum Gender {
  female = 0;
  male = 1;
};

enum ZodiacSign {
  aries = 0;
  taurus = 1;
  gemini = 2;
  cancer = 3;
  leo = 4;
  virgo = 5;
  libra = 6;
  scorpius = 7;
  sagittarius = 8;
  capricorn = 9;
  aquarius = 10;
  pisces = 11;
};

message Nestiness
{
  message SubA {
    message SubB {
      message SubC {
        uint32 d = 1;
        repeated uint32 e = 2;
      };
      SubC c = 1;
    };
    SubB b = 100;
  };
  SubA a = 1;
};

message Envelope {
  message Person {
    message MeasureUnit
    {
      string unit = 1;
      float coef = 2;
    };
    string uuid = 1;
    string name = 2;
    string surname = 3;
    Gender gender = 4;
    uint32 birthDate = 5;
    bytes photo = 6;
    string phoneNumber = 7;
    bool isOnline = 8;
    fixed32 visitTime = 9;
    uint32 age = 10;
    ZodiacSign zodiacSign = 11;
    repeated string songs = 12;
    repeated uint32 color = 13;
    string hometown = 14;
    repeated float location = 15;
    double pi = 16;
    double lotteryWin = 17;
    float someRatio = 18;
    float temperature = 19;
    sint64 randomBigNumber = 20;
    repeated MeasureUnit measureUnits = 21;
    Nestiness nestiness = 22;
  };
  repeated Person person = 1;
};

// same as wrapped in Envelope, used for verification
message Person {
  message MeasureUnit
  {
    string unit = 1;
    float coef = 2;
  };
  string uuid = 1;
  string name = 2;
  string surname = 3;
  Gender gender = 4;
  uint32 birthDate = 5;
  bytes photo = 6;
  string phoneNumber = 7;
  bool isOnline = 8;
  fixed32 visitTime = 9;
  uint32 age = 10;
  ZodiacSign zodiacSign = 11;
  repeated string songs = 12;
  repeated uint32 color = 13;
  string hometown = 14;
  repeated float location = 15;
  double pi = 16;
  double lotteryWin = 17;
  float someRatio = 18;
  float temperature = 19;
  sint64 randomBigNumber = 20;
  repeated MeasureUnit measureUnits = 21;
  Nestiness nestiness = 22;
};
